﻿//
// Lightbox Gallery Module for DotNetNuke
// Project Contributors - Will Strohl (http://www.WillStrohl.com), Armand Datema (http://www.schwingsoft.com)
//
//Copyright (c) 2009-2013, Will Strohl
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are 
//permitted provided that the following conditions are met:
//
//Redistributions of source code must retain the above copyright notice, this list of 
//conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright notice, this list 
//of conditions and the following disclaimer in the documentation and/or other 
//materials provided with the distribution.
//
//Neither the name of Will Strohl, Armand Datema, Lightbox Gallery, nor the names of its contributors may be 
//used to endorse or promote products derived from this software without specific prior 
//written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
//DAMAGE.
//

//INSTANT C# NOTE: Formerly VB project-level imports:
using DotNetNuke.Common.Utilities;
using System;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Exceptions;

namespace WillStrohl.Modules.Lightbox
{

	[Serializable()]
	public sealed class ImageInfo : IImageInfo, IHydratable
	{

#region  Private Members 

		private int p_ImageId = Null.NullInteger;
		private int p_LightboxId = Null.NullInteger;
		private string p_FileName = Null.NullString;
		private string p_Title = Null.NullString;
		private string p_Description = Null.NullString;
		private int p_DisplayOrder = Null.NullInteger;
		private int p_LastUpdatedBy = Null.NullInteger;
		private DateTime p_LastUpdatedDate = Null.NullDate;

#endregion

#region  Public Properties 

		public string Description
		{
			get
			{
				return p_Description;
			}
			set
			{
				p_Description = value;
			}
		}

		public int DisplayOrder
		{
			get
			{
				return p_DisplayOrder;
			}
			set
			{
				p_DisplayOrder = value;
			}
		}

		public string FileName
		{
			get
			{
				return p_FileName;
			}
			set
			{
				p_FileName = value;
			}
		}

		public int ImageId
		{
			get
			{
				return p_ImageId;
			}
			set
			{
				p_ImageId = value;
			}
		}

		public int LightboxId
		{
			get
			{
				return p_LightboxId;
			}
			set
			{
				p_LightboxId = value;
			}
		}

		public string Title
		{
			get
			{
				return p_Title;
			}
			set
			{
				p_Title = value;
			}
		}

		public int LastUpdatedBy
		{
			get
			{
				return p_LastUpdatedBy;
			}
			set
			{
				p_LastUpdatedBy = value;
			}
		}

		public DateTime LastUpdatedDate
		{
			get
			{
				return p_LastUpdatedDate;
			}
			set
			{
				p_LastUpdatedDate = value;
			}
		}

#endregion

#region  Constructors 

		public ImageInfo()
		{
			// do nothing
		}

		public ImageInfo(int ImageId, int LightboxId, string FileName, string Title, string Description, int DisplayOrder, int LastUpdatedBy, DateTime LastUpdatedDate)
		{
			p_ImageId = ImageId;
			p_LightboxId = LightboxId;
			p_FileName = FileName;
			p_Title = Title;
			p_Description = Description;
			p_DisplayOrder = DisplayOrder;
			p_LastUpdatedBy = LastUpdatedBy;
			p_LastUpdatedDate = LastUpdatedDate;
		}

		public ImageInfo(int LightboxId, string FileName, string Title, string Description, int DisplayOrder, int LastUpdatedBy, DateTime LastUpdatedDate)
		{
			p_LightboxId = LightboxId;
			p_FileName = FileName;
			p_Title = Title;
			p_Description = Description;
			p_DisplayOrder = DisplayOrder;
			p_LastUpdatedBy = LastUpdatedBy;
			p_LastUpdatedDate = LastUpdatedDate;
		}

#endregion

#region  IHydratable Implementation 

		public int KeyID
		{
			get
			{
				return p_ImageId;
			}
			set
			{
				p_ImageId = value;
			}
		}

		public void Fill(System.Data.IDataReader dr)
		{
			try
			{
				while (dr.Read())
				{
					if (dr[ImageInfoMembers.ImageIdField] != null)
					{
						p_ImageId = int.Parse(dr[ImageInfoMembers.ImageIdField].ToString(), System.Globalization.NumberStyles.Integer);
					}
					if (dr[ImageInfoMembers.LightboxIdField] != null)
					{
						p_LightboxId = int.Parse(dr[ImageInfoMembers.LightboxIdField].ToString(), System.Globalization.NumberStyles.Integer);
					}
					if (dr[ImageInfoMembers.FileNameField] != null)
					{
						p_FileName = dr[ImageInfoMembers.FileNameField].ToString();
					}
					if (dr[ImageInfoMembers.TitleField] != null)
					{
						p_Title = dr[ImageInfoMembers.TitleField].ToString();
					}
					if (dr[ImageInfoMembers.DescriptionField] != null)
					{
						p_Description = dr[ImageInfoMembers.DescriptionField].ToString();
					}
					if (dr[ImageInfoMembers.DisplayOrderField] != null)
					{
						p_DisplayOrder = int.Parse(dr[ImageInfoMembers.DisplayOrderField].ToString(), System.Globalization.NumberStyles.Integer);
					}
					if (dr[ImageInfoMembers.LastUpdatedByField] != null)
					{
						try
						{
							p_LastUpdatedBy = int.Parse(dr[ImageInfoMembers.LastUpdatedByField].ToString(), System.Globalization.NumberStyles.Integer);
						}
						catch
						{
							// do nothing
						}
					}
					if (dr[ImageInfoMembers.LastUpdatedDateField] != null)
					{
						try
						{
							p_LastUpdatedDate = DateTime.Parse(dr[ImageInfoMembers.LastUpdatedDateField].ToString());
						}
						catch
						{
							p_LastUpdatedDate = DateTime.Now;
						}
					}
				}
			}
			catch (Exception ex)
			{
				Exceptions.LogException(ex);
			}
			finally
			{
				if (! dr.IsClosed)
				{
					dr.Close();
				}
			}
		}

#endregion

	}

}